package com.sinog.biz.service.business.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sinog.biz.mapper.havexml.BackgroundMapper;
import com.sinog.biz.service.business.BackgroundFeignService;
import com.sinog.biz.util.FtpUtil;
import com.sinog.core.domain.Background;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
 * @desc 系统管理 - 更换背景 - 更换背景 - BackgroundFeignServiceImpl
 * @author -
 * @date -
 */
@Slf4j
@Service
public class BackgroundFeignServiceImpl implements BackgroundFeignService {

    @Resource
    private BackgroundMapper backgroundMapper;

    /**
     * 系统管理 - 更换背景 - 更换背景 - 获取列表数据
     * @param longUser longUser
     * @return List<Background>
     */
    @Override
    public List<Background> getBackgroundList(String longUser) {
        List<Background> result = backgroundMapper.getBackgroundList(longUser);
        if(result.isEmpty()) {
            return Collections.emptyList();
        }
        return result;
    }

    /**
     * 系统管理 - 更换背景 - 更换背景 - 上传背景图片
     * @param background background
     * @return int
     */
    @Override
    public int saveBackgroundFileData(Background background) {
        return backgroundMapper.insertData(background);
    }

    /**
     * 系统管理 - 更换背景 - 更换背景 - 查询是否有该数据
     * @param background background
     * @return Background
     */
    @Override
    public Background findBackgroundFileOne(Background background) {
        QueryWrapper<Background> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_id",background.getUserId()).eq("id",background.getId());
        return backgroundMapper.selectOne(queryWrapper);
    }

    /**
     * 系统管理 - 更换背景 - 更换背景 - 查询是否有该数据
     * @param background background
     * @return int
     */
    @Override
    public int removeBackgroundFileOne(Background background) {
        return backgroundMapper.deleteById(background.getId());
    }

    /**
     * 系统管理 - 更换背景 - 更换背景 - 根据id查询选中的图片是否是当前背景
     * @param id id
     * @return Background
     */
    @Override
    public Background selectBackgroundById(String id) {
        QueryWrapper<Background> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id",Integer.parseInt(id));
        return backgroundMapper.selectOne(queryWrapper);
    }

    /**
     * 系统管理 - 更换背景 - 更换背景 - 设置选中的图片为背景
     * @param longUser longUser
     * @return Background
     */
    @Override
    public Background selectBackgroundByUserId(String longUser) {
        return backgroundMapper.selectBackgroundByUserId(longUser);
    }

    /**
     * 系统管理 - 更换背景 - 更换背景 - 设置选中的图片为背景
     * @param paramMap paramMap
     * @return int
     */
    @Override
    public int updateIsUsed(Map<String,String> paramMap) {
        int id = Integer.parseInt(paramMap.get("id"));
        String isUsed = paramMap.get("isUsed");
        return backgroundMapper.updateIsUsed(id,isUsed);
    }

    /**
     * 系统管理 - 更换背景 - 更换背景 - 设置选中的图片为背景
     * @param longUser longUser
     * @return int
     */
    @Override
    public int insertDefaultBg(String longUser) {
        return backgroundMapper.insertDefaultBg(longUser);
    }

    /**
     * 系统管理 - 更换背景 - 更换背景 - 删除ftp文件
     * @param ftppath ftppath
     * @param fileUrlArr fileUrlArr
     * @return boolean
     */
    @Override
    public boolean removeBackgroundFromFtp(String ftppath,String[] fileUrlArr) {
        boolean ftpFileDelFlag = false;
        FTPClient ftp;
        try {
            ftp = FtpUtil.getFtpClient();
            FTPFile[] ftpFiles = ftp.listFiles(ftppath);
            boolean ftpExist = FtpUtil.isFileExist(fileUrlArr[fileUrlArr.length - 1],ftpFiles);
            if(ftpExist) {
                return FtpUtil.deleteFile(ftp,ftppath,fileUrlArr[fileUrlArr.length - 1]);
            }
        } catch(IOException e) {
            log.error("发生异常:{}",e.getMessage());
        }
        return ftpFileDelFlag;
    }
}